/**
 * 验证Socket Cookie认证修复效果
 */

const axios = require('axios').default;

async function verifyFix() {
  console.log('🔍 验证Socket Cookie认证修复效果\n');

  try {
    // 1. 测试主服务器健康状态
    console.log('1️⃣ 检查主服务器状态...');
    try {
      const response = await axios.get('http://localhost:7001/api/sso/health');
      console.log('✅ 主服务器运行正常');
    } catch (error) {
      console.log('❌ 主服务器未启动或异常:', error.message);
      return;
    }

    // 2. 测试Socket服务器
    console.log('\n2️⃣ 检查Socket服务器状态...');
    try {
      const response = await axios.get('http://localhost:7002/socket.io/');
      console.log('✅ Socket服务器运行正常');
    } catch (error) {
      console.log('❌ Socket服务器未启动或异常:', error.message);
      return;
    }

    // 3. 测试登录获取Cookie
    console.log('\n3️⃣ 测试用户登录...');
    try {
      const loginResponse = await axios.post('http://localhost:7001/api/sso/login', {
        username: 'testuser',
        password: 'testpass'
      }, {
        withCredentials: true
      });

      if (loginResponse.data.success) {
        console.log('✅ 登录成功');
        console.log('📝 SessionId:', loginResponse.data.data.sessionId);

        // 获取Cookie
        const cookies = loginResponse.headers['set-cookie'];
        console.log('🍪 返回的Cookie:', cookies);

        // 4. 测试Cookie验证
        console.log('\n4️⃣ 测试Cookie验证...');
        const cookieHeader = cookies ? cookies.join('; ') : '';

        const validateResponse = await axios.get('http://localhost:7001/api/sso/profile', {
          headers: {
            'Cookie': cookieHeader
          }
        });

        if (validateResponse.data.success) {
          console.log('✅ Cookie验证成功');
          console.log('👤 用户信息:', validateResponse.data.data.user);
        } else {
          console.log('❌ Cookie验证失败');
        }

      } else {
        console.log('❌ 登录失败:', loginResponse.data.message);
      }
    } catch (error) {
      if (error.response?.status === 400 && error.response?.data?.message?.includes('用户不存在')) {
        console.log('⚠️ 测试用户不存在，请先创建测试用户');
        console.log('💡 可以通过注册接口创建: POST /api/sso/register');
      } else {
        console.log('❌ 登录测试失败:', error.message);
      }
    }

    console.log('\n📋 修复要点检查清单:');
    console.log('✅ 前端Socket连接启用了 withCredentials: true');
    console.log('✅ 服务端Socket服务器配置了正确的CORS credentials');
    console.log('✅ 服务端Cookie解析逻辑已优化');
    console.log('✅ 添加了详细的调试日志');

    console.log('\n🧪 接下来的测试步骤:');
    console.log('1. 启动前端应用');
    console.log('2. 进行用户登录');
    console.log('3. 打开文档编辑页面');
    console.log('4. 检查Socket连接和权限验证');
    console.log('5. 测试协同编辑功能');

  } catch (error) {
    console.error('❌ 验证过程中发生错误:', error.message);
  }
}

// 运行验证
verifyFix();
